「すみません」は、「済まない」の丁寧形です。
「ごめんなさい」は、「御免」(許してくれの意)の丁寧形であり、古形の「御免なさいまし」から転じた「ごめんなさいませ」の方がより丁寧な言葉遣いになります。
「申し訳ありません」は、「申し訳ない」の丁寧形です。
「すみません」・「ごめんなさい」・「申し訳ありません」は、いずれも謝罪の意味の敬語表現です。しかし、使える状況や相手などに違いがあり、その原因はそれぞれの言葉の原義(本来の意味)にあると思われます。
「すみません」の原義は、人に対して義理が立たないことであり、「申し訳ありません」は、言い訳できないという意味です。どちらも自分の罪を認めて反省している気持ちを表している言葉と言えます。他方、「ごめんなさい」は、許してくださいという意味であり、謝罪の気持ちよりも罰を免れたい思いが勝っている言葉と言えるでしょう。