You could try this. It has lots of intermediate steps to show each stage, but I think it works.
1. Take the input date (Date) e. G. 31-01-2020 and add 3 months
2. Calculate a month number for the new month = 12 x year + months + months to add = 2020*12+1+3=24244
3. Work out the new year from 24244 by deducting 1 and dividing by 12 into a whole number field.
4. Work out the new month by multiplying the result in step 3 by 12 and deducting the answer from step 2
(steps 2 to 4 take account of going over a year end)
5. Create a string containing 12 characters, one for each month, and each character is a code for the number of
days in the month N=Normal (31),S=Short (30),F=February (28 or 29).
6. Turn the code in step 5 into a number (separate field as cannot use subString in a number field) with If logic to get 28,29,30 or 31 (using the leap year flag)
6. Work out the new day number by taking the lower of the day in the original date in step 1(31) and the max number of days in the new month..so, resulting date is 30 April (not 1 May)
7. Use toDate() function to convert the new year, month, date fields back to a new date.
See attached
M