The three are not directly related at all.
You would use MPPP to allow for bandwidth on demand. This can be enabled on the physical interface, or on a virtual (dialer or virtual-template) interface.
A dialer profile would be used when you need to have per-user configs on the router, versus using an AAA server. In that case you will need to have a dialer profile for EVERY user dialing in.
A virtual-template can be used 2 ways; either "multilink virtual-template", which would be applicable when you have serial (non-dialer) MPPP interfaces or when you are doing MMPPP, or "virtual-profile virtual-template", which would be when you want to use virtual-profiles (usually with an AAA server).
So you can use MPPP at about any time, and whether or not you use dialer profiles or virtual-profiles really depends on your application. You can read about each in the doc section of CCO.