Why would you use string manipulation when it's easier to work directly with the numbers using some math?
Here's a modification of Eirikur's code.
USE tempdb;
GO
DECLARE @SAMPLE_SIZE INT = 123;
DECLARE @PADDING CHAR(3) = '000';
;WITH T(N) AS (SELECT N FROM (VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL)) AS X(N))
,NUMS(N) AS (SELECT TOP(@SAMPLE_SIZE) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS N FROM T T1,T T2,T T3,T T4,T T5,T T6,T T7,T T8,T T9)
SELECT
NM.N AS INT_NUM
,STUFF(@PADDING,LEN(@PADDING)-(LEN(NM.N)-1),LEN(NM.N),NM.N) AS PADDED_NUM
,RIGHT( 1000 + NM.N, 3) AS MATH_PADDED_NUM
FROM NUMS NM;