Haskell - 118 bytes
z=zipWith(+) p n|n<2=[1]|m<-p(n-1)=z(0:0:m)(m++[0,0]) -- Generate the nth triangle row. r#n|n>0=(0:r++[0])#(n-1)|2>1=r -- Pad a row (r) with n 0s on each side. f n=foldl1 z[p x#(n-x)|x<-[1..n]] -- Sum the first n [padded] rows z=zipWith(+) p n|n<2=[1]|m<-p(n-1)=z(0:0:m)(m++[0,0]) -- Generate the nth triangle row. r#n|n>0=(0:r++[0])#(n-1)|2>1=r -- Pad a row (r) with n 0s on each side. f n=foldl1 z[p x#(n-x)|x<-[1..n]] -- Sum the first n [padded] rows