Kallis, who is playing his final test before retiring, faced 224 balls for his unbeaten 78 in what could be his last test innings. He took the Proteas to within 35 of India's first innings score.
The 38-year-old notched up his 87th half-century in tests and will resume day four with nightwatchman Dale Steyn (zero not out).
South Africa lost JP Duminy (28) just before the close, one of four wickets for Indian spinner Ravindra Jadeja (four for 87).
In Image: South Africa's batsman Jacques Kallis, left, raises his bat while leaving the field with India's players after play had been cut short due to bad light