Few ways around this.
first way :
Setup the appropriate routes on A and C. ie: On A : route add -net {C's subnet} gw {B's IP in A's Subnet} and on C the same, substituting C and A. As B is direcly inbetween, its safe to assume that it can act as a router - though ensure IP forwarding has been turned on and you have adjusted any firewalling/filters as required to let the traffic pass through B to each subnet.
second way :
Setup something like Squid proxy server on B - it can proxy HTTP/HTTPS *and* FTP... then just setup the 'ftp_proxy' environment variable on C to point to B.
yet another way :
you can tunnel FTP over SSH using the -L option (man ssh). FTP's a little tricky because there's two TCP channels - so once you're logged in, switch your FTP client into passive mode and you should be able to suck down whatever files you need. Obviously, if A can't see C, then you'll need to tunnel onto B, with destination IP:Port as A's IP and port 21 (for FTP). Then just 'ftp localhost' and you should be sweet. Make sure you're not running an FTP server locally though, or could get confusing
hope it makes sense.