I want to create 3 different register forms for 3 member groups. Is this possible within expression engine. I have seen the freemember is theis the best way to achieve this?
There are several add-ons that would accomplish what you're looking to do. Nick already Mentioned Zoo Visitor. Here is a list of other add-ons that will also work well:
Zoo Visitor, Profile:Edit, and Safecracker Registration have the added feature of storing members as Channel entries. So if you need maximum flexibility with your member fields then that feature would be an advantage.
For a detailed comparison of a few of these take a look at Focus Lab's blog post, Member Profile Add-ons in ExpressionEngine.
Because all of these accomplish the goal you outlined in your question, what's "best" will depend on your preferences and on any other goals you might have related to member data on your site.