Sun machines don't need to compress kernel images. It's really only needed to get around the memory limitations when booting on a PC (i.e 1M in real mode). You can compress it with gzip and SILO will recognize that, but it is not needed. 29M is a really large kernel and I wonder if you just read it wrong. A google search turned up a mailing-list post. The limit seems to be around 2.6M and compression doesn't make a difference. If you read the size wrong (hint: use the '-h' option with ls to get nicer sizes) and it's really 2.9M, then it's just over the limit. Try recompiling using more modules to reduce the size of the kernel.
Oh, and don't rename your kernel to 'look like' 2.2.16. Several utilities will be looking for System.map-2.2.20, among other issues. It will also be confusing to you or others later on. I like to use symbolic links for the maintaining kernel images. Just make a link like "vmlinux-main" and edit silo.conf to use that and rerun silo. You should also make a link like "vmlinux-backup" and have that as a "backup" option in silo.conf. Then when you compile a new kernel, move vmlinux-main to vmlinux-backup, make a new vmlinux-main link for the new kernel, and run silo.