あげる/あげます
あげる is used when the speaker is giving something to someone else. The item moves away from them. So I can give flowers to a friend (私は友達にはなをあげます。) or Ella can give Kara a pencil. (エラさんはカラさんにえんぴつをあげます。)
くれる/くれます
くれる is used when the speaker, specifically, is given something something. The item is coming towards the speaker. So Sophie gives me a pair of gloves would be an appropriate example. (ソヒさんはてぶくろをくれます。) You could add 私に, but it’s not necessary as the use of くれる signals that the item is coming to you.
You can also use くれる when the recipient is someone close to the speaker e.g a family member or close friend. So if the doctor gave my mother medicine, (医者は母にくすりをくれました。) that works.
もらう/もらいます
もらう, unlike the previous verbs, has no specific targets and means ‘receive’. Be careful, に here marks the giver. So in this case, I receive sweets (私はおかしをもらいます。) and Lucy can receive a present from Laura (ルシさんはローラさんにプレゼントをもらいます。)