Knowing the exact error would be helpful to debug this problem. Also this seems more like a sysadmin problem (superuser?). In any case, running traceroute would also help debug this problem.
But assuming that there is some administrative blocking of B->C, it is technically possible to go through A. It isn't a route, instead you need to create a tunnel (such as openvpn, or ipip, or any number of other tunnels) between B and A, then on A you would (typically) NAT or MASQUERADE B's IP address to A or some IP address assigned to A. C then is not aware of B's IP address. Packets travel from A to B through the tunnel (source B, destination C), B then rewrite the packet to, etc from A to C. C replies to B, B rewrite again from C to B, packet travels over tunnel.