Improved Logical Reasoning of Language Models via Differentiable Symbolic Programming