You don't want to manually remove entries from those folders.
Windows 7 saves it's installer packages (much like a c:\i386 folder on an XP machine) locally so that you don't need to insert the win7 disk when installing updates or running repairs.
Also, Windows 7 uses a central directory to store most of the files that make up the operating system itself and then places what are essentially shortcuts or pointers to those files in the places where the files are actually used. This makes it pretty easy to maintain critical file versions and greatly simplifies updates. This also makes for a single very very large folder inside your Windows directory that you should not, ever, ever no never, modify or delete unless you want the wrath of the Gates to fall upon you. Or something like that.
All that being said, using CCleaner and selecting the option to remove Hotfix uninstallers should remove the uninstall packages for any patches you've installed. Since the patched files are already in the windows installer source directory, and as long as a recent patch hasn't bolluxed up your system, this may help get things cleaned up.
One final not though: 20GB isn't all that much more than a standard Windows 7 install. It's unlikely you're going to get much smaller than this.
UPDATE CCleaner revision:
Ok, it appears as though, once Windows 7 applies the patches, the necessary source files are integrated into the windows files repository and any extraneous patch files are removed. So CCleaner does not that the Hotfix Uninstaller option in Windows 7 that it has in XP.
The only thing I'd be careful of removing are the Windows Log Files. Everything else listed in CCleaner should be OK to be deleted so long as you know what it is you're deleting (if you rely on your jump lists or MRU logs, CCleaner only knows that if you tell it not to delete them.
But like I said, those folder sizes are not outside the realm of normal in the Windows 7 world.