Interpret numbers very literally
Python 2, 76 bytes



f=lambda n,k=1000:n&gt;19and(f(n/k,k/10)+`k-k%4*5`)*(n&gt;=k)+f(n%k,k/10)or`n`[:n]


Try it online!

Test suite from Chas Brown.

A fully recursive solution that splits on place values k=1000, k=100, and k=10. The separator for the place values is computed as k-k%4*5, which maps 

1000 -&gt; 1000
100  -&gt; 100
10   -&gt; 0


By stopping when n&lt;=19, we avoid one-word numbers in the teens being split up.