2 added 72 characters in body
source | link

You're joining columns at the 3rd level but have ragged lists:

DeleteCases[Flatten[Join[{#, #, #} &/@l1, l2, 3], 1], {_, _}]

(* {{a1, a2, 1, 2, 3}, {a1, a2, 4, 5, 6}, {b1, b2, 10, 11, 12}, {b1, b2, 
  13, 14, 15}, {b1, b2, 16, 17, 18}, {c1, c2, 19, 20, 21}} *)

(Joining unevenragged lists gives you an evennon-ragged list with padding that has to be removed with DeleteCases otherwise this could be concise)

DeleteCases[Flatten[Join[{#, #, #} &/@l1, l2, 3], 1], {_, _}]

(* {{a1, a2, 1, 2, 3}, {a1, a2, 4, 5, 6}, {b1, b2, 10, 11, 12}, {b1, b2, 
  13, 14, 15}, {b1, b2, 16, 17, 18}, {c1, c2, 19, 20, 21}} *)

(Joining uneven lists gives you an even list with padding that has to be removed with DeleteCases otherwise this could be concise)

You're joining columns at the 3rd level but have ragged lists:

DeleteCases[Flatten[Join[{#, #, #} &/@l1, l2, 3], 1], {_, _}]

(* {{a1, a2, 1, 2, 3}, {a1, a2, 4, 5, 6}, {b1, b2, 10, 11, 12}, {b1, b2, 
  13, 14, 15}, {b1, b2, 16, 17, 18}, {c1, c2, 19, 20, 21}} *)

(Joining ragged lists gives you an non-ragged list with padding that has to be removed with DeleteCases otherwise this could be concise)

1
source | link

DeleteCases[Flatten[Join[{#, #, #} &/@l1, l2, 3], 1], {_, _}]

(* {{a1, a2, 1, 2, 3}, {a1, a2, 4, 5, 6}, {b1, b2, 10, 11, 12}, {b1, b2, 
  13, 14, 15}, {b1, b2, 16, 17, 18}, {c1, c2, 19, 20, 21}} *)

(Joining uneven lists gives you an even list with padding that has to be removed with DeleteCases otherwise this could be concise)