あげます goes from the subject to the indirect object, i.e. from you/somebody you're taking the viewpoint of to the receiver. Unlike the English verb 'to give', it only works one way, so that makes it a bit easier to understand.
もらいます and くれます, on the other hand, are a little more tricky. Although they can be translated the same way sometimes, they actually work in opposite directions in Japanese. I don't have a lot of time right now, but I gave an explanation in
this thread, so try checking that out and if there's anything in particular you don't understand I'll try giving you a more detailed explanation later (if somebody else doesn't).