So, do you need FAT16 file support for the SD card to share with a PC? That adds to the memory (some RAM but mostly code space)
USB.... What device/class are you going to be Mass Storage (MSC), OnTheGo, CDC (Communication Device?)? The USB stack implementation you need might add specific timers and RAM for endpoints, (buffers) and depending on what you are going to implement, might add several hundreds to a few KB of RAM.
GPRS/GSM - will you just communicated via serial port and stay in command mode (and run TCP/IP stack on the modem) or will you use the modem in binary/data mode (transparent) and thus have to run the TCP/IP stack on your microcontroller. TCP/IP stack, even LWIP, has significant footprint, plus the code to initialize and communicate with the modem.
LCD display (this will require some driver code, somewhat tailored to whichever controller IC you end up using in the display. If using a parallel (bus) interface to it, you'll probably need less code space. IF you are using I2C or SPI (clocked serial) you'll use alot fewer microcontroller lines, but probably have more code to write. Plus, If you have to do graphics animations (graphic or text based LCD) with the serial interface you'll need to reserve some RAM space to work as a local buffer (cannot read the bits from most LCD controllers when using serial interface).
It is good to start out with a block diagram of your idea, so taht you can count up how many I/O lines, serial ports, external bus, etc. you need to help you sort out what general class/size microcontroller you need. Then start to look at the amount of code space and RAM space you think you might need.... and then double it.