The tourists, who have been reduced to 10 fit batsmen after an injury to JP Duminy, had Dale Steyn (15 not out) and debutant Rory Kleinveldt (1) at the crease as they approached the kind of position where they might consider a declaration.
Amla scored a third century in his last four Tests before falling for 104 to a harsh-looking lbw decision before lunch, leaving Kallis to bat on to 147 before he too was dismissed in the fourth over after the break.
Australian quick James Pattinson (3-93) had the experienced all rounder caught at gully by debutant Rob Quiney and then came back in his next over to remove AB de Villiers for 40, caught at point by David Warner.
Pace bowler Vernon Philander managed to bring up the 400 mark for his country with a huge six to deep midwicket before he too was caught, in the slips off Peter Siddle by Australia captain Michael Clarke for 11.
Steyn survived an lbw decision off the bowling of Ben Hilfenhaus thanks to the TV review system, leaving Jacques Rudolph to become Australia's seventh victim when he sliced a Nathan Lyon delivery to Quiney at cover for 31.
The tourists had resumed on 255 for two after the second day had been washed away by the Brisbane rain and although Australia's pace attack bowled better than they had on day one, Amla soon had the 10 runs he needed for his 17th Test hundred.
The 29-year-old cut Pattinson for the seventh four of his innings to reach the mark, continuing the purple patch that included a century against England at Lord's and an unbeaten 311 at the Oval.
TV replays confirmed the ball would have gone over the stumps but Amla decided not to appeal after consulting Kallis and their 165-run partnership was over.
There was now a stiff breeze blowing over the Gabba but in the next over, the evergreen Kallis smacked two runs through midwicket to bring up his 44th Test hundred.
Kallis soon brought up the 300 for his country with a slashed four over point and he and De Villiers put together a 50 partnership in just 99 balls.
The Gabba paused for two minutes' silence in memory of the dead of the two World Wars but reflection failed to galvanise the Australian team and South Africa went into lunch at 357 for three.