IPsec is not feasible, as all endpoints are in the same subnet and they need to talk to each other using their real IPs, not the virtual ones.
Regarding OpenVPN, the client-to-client packets have to be routed through the OpenVPN server (if I understood correctly), therefore I would automatically have 2 Internet hops between clients.
How about a hybrid solution with OpenVPN server on router A, OpenVPN clients on routers B and C (with client-to-client communication disabled) and a L2TPv3 tunnel between routers B and C? Would this also lead to a routing loop issue?