Python (3.5), <s>63</s> 62 bytes
---------------------

 def f(a):
 r=[0]
 for i in a:r+=i*(r[-1]//i+1),
 return r[1:]

Test
----
 >>> print('\n'.join([str(i)+' => '+str(f(i)) for i in [[9],[1,2],[2,1],[7,3],[1,1,1,1],[5,4,12,1,3],[3,3,3,8,16],[6,5,4,3,2,1],[9,4,6,6,5,78,12,88],[8,9,41,5,12,3,5,6],[15,8,12,47,22,15,4,66,72,15,3,4]]]))
 [9] => [9]
 [1, 2] => [1, 2]
 [2, 1] => [2, 3]
 [7, 3] => [7, 9]
 [1, 1, 1, 1] => [1, 2, 3, 4]
 [5, 4, 12, 1, 3] => [5, 8, 12, 13, 15]
 [3, 3, 3, 8, 16] => [3, 6, 9, 16, 32]
 [6, 5, 4, 3, 2, 1] => [6, 10, 12, 15, 16, 17]
 [9, 4, 6, 6, 5, 78, 12, 88] => [9, 12, 18, 24, 25, 78, 84, 88]
 [8, 9, 41, 5, 12, 3, 5, 6] => [8, 9, 41, 45, 48, 51, 55, 60]
 [15, 8, 12, 47, 22, 15, 4, 66, 72, 15, 3, 4] => [15, 16, 24, 47, 66, 75, 76, 132, 144, 150, 153, 156]



Previous solution
-----------------

A recursive one but a bit larger (68 bytes)

 f=lambda a,i=0:[i,*f(a[1:],a[0]*(i//a[0]+1))][i==0:]if a!=[]else[i]