어렵다 - hard to do something (in specific situations). not easy.
힘들다 -
1. used as "어렵다". In this case, both are the same and interchangeable.
a difficult exam : 어려운 / 힘든 시험.
2. strenuous (either physically or mentally)
곤란하다 -
1. used as "어렵다". but unlike the others, this is usually used to describe ppl's current situation. i.e. 생활이 곤란하다, 내 입장이 곤란하다, 재정이 곤란하다, etc. So "곤란한 시험" implies that the exam is hard AND the speaker is currently in a bad situation due to that exam.
2. an idiom "곤란한데(요). or 곤란합니다." is usually used to describe the speaker's current (difficult) situation OR used to refuse/reject the proposal in courteous/kindly terms.