Something like this?
triangleForm[t : {_List ..} /; Depth@t == 3] :=
Show[Graphics[{
MapIndexed[Text[#, {#2 - #/2, -#} & @@ #2] &, t, {2}],
Red,
Line[{{1/2, -1}, {1 - #/2, -#}, {#/2, -#}, {1/2, -1}}] & @ Length[t]
}],
TextStyle -> FontSize -> 18]
triangleForm[t]

Or probably more like:
triangleForm[t : {_List ..} /; Depth@t == 3] :=
Show[Graphics[{
MapIndexed[Text[#, {#2 - #/2, -#} & @@ #2] &, t, {2}],
Red,
Line[{{1/2, 0}, {-#/2, -# - 1/2}, {1 + #/2, -# - 1/2}, {1/2, 0}}] & @ Length[t]
}],
TextStyle -> FontSize -> 18]
triangleForm[t]

With automatic image size:
r = 9;
t = Table[2^(n - k) 3^k, {n, 0, r}, {k, 0, n}];
triangleForm[t : {_List ..} /; Depth@t == 3] :=
Show[Graphics[{
MapIndexed[Text[#, {#2 - #/2, -#} & @@ #2] &, t, {2}],
Red,
Line[{{1/2, 0}, {-#/2, -# - 1/2}, {1 + #/2, -# - 1/2}, {1/2, 0}}] & @ Length[t]
}],
TextStyle -> FontSize -> 16,
ImageSize -> (Length@t + 1) * First@Rasterize[Style[t[[-1, -1]], 16], "RasterSize"]
]
triangleForm[t]

Another variation following a comment below:
r = 8;
t = Table[2^(n - k) 3^k, {n, 0, r}, {k, 0, n}];
triangleForm[t : {_List ..} /; Depth@t == 3] :=
Show[Graphics[{
Red,
(Line /@ Join[#, Riffle @@@ Partition[#, 2, 1]]) &@
Table[{(1 - i + 2 j - r)/2, i - r - 1}, {i, 0, r}, {j, i, r}],
MapIndexed[Text[Panel[#, FrameMargins -> 0], {#2 - #/2, -#} & @@ #2] &, t, {2}]
}],
TextStyle -> FontSize -> 18
]
triangleForm[t]
