AddMonthsメソッドで月単位の加減算を行った結果その月の末日を超える場合は、日付の部分はその月の末日となります。 例えば、1月31日から3ヶ月加算した場合、4月31日は4月の末日を超えるため結果は4月30日となります。 同様に、1月31日から1ヶ月加算した場合、結果はうるう年であれば2月28日、そうでなければ2月29日となります。

DateTime/DateTimeOffset.AddMonthsで1月31日のnヶ月後の日付を求める場合の動作
Imports System

Class Sample
  Shared Sub Main()
    Dim baseDate As New DateTime(2015, 1, 31)

    Console.WriteLine("{0} + 1 months = {1}", baseDate, baseDate.AddMonths(+1))
    Console.WriteLine("{0} + 2 months = {1}", baseDate, baseDate.AddMonths(+2))
    Console.WriteLine("{0} + 3 months = {1}", baseDate, baseDate.AddMonths(+3))
    Console.WriteLine()

    baseDate = New DateTime(2016, 1, 31)

    Console.WriteLine("{0} + 1 months = {1}", baseDate, baseDate.AddMonths(+1))
    Console.WriteLine("{0} + 2 months = {1}", baseDate, baseDate.AddMonths(+2))
    Console.WriteLine("{0} + 3 months = {1}", baseDate, baseDate.AddMonths(+3))
  End Sub
End Module
実行結果
2015/01/31 0:00:00 + 1 months = 2015/02/28 0:00:00
2015/01/31 0:00:00 + 2 months = 2015/03/31 0:00:00
2015/01/31 0:00:00 + 3 months = 2015/04/30 0:00:00

2016/01/31 0:00:00 + 1 months = 2016/02/29 0:00:00
2016/01/31 0:00:00 + 2 months = 2016/03/31 0:00:00
2016/01/31 0:00:00 + 3 months = 2016/04/30 0:00:00