I see the principal idee, but N can be large, so I have to loop in the block part. I try to avoid that loop.
proc iml;
p = 3;
N = 2;
start TBlock(AN, p);
M = j(p,p,1) + I(p);
C = M @ AN;
return (C);
finish TBlock;
start AD(N, A, p);
t = 1;
do rs=1 to N;
B = A[t:(t+2),];
BB = TBlock(B, p);
AF = block(AF, BB);
t = t + p;
end;
return (AF);
finish AD;
A1 = {1 2 3,
2 4 5,
3 5 7};
A2 = {1 7 9,
7 8 1,
9 1 1};
AC = A1//A2;
AF = AD(N, AC, p);
print AF;
quit;