MMIX, 92 bytes (23 instrs)
I'm cheating a bit; instead of printing (which would take a lot of work, this being machine language), I instead pass the numbers to a function passed in!
00000000: fe020004 34000100 e3030000 c1040300 “£¡¥4¡¢¡ẉ¤¡¡Ḋ¥¤¡
00000010: e7030001 da040403 3c040304 1d050403 ḃ¤¡¢ḷ¥¥¤<¥¤¥ø¦¥¤
00000020: feff0006 6204ff05 43fffffd 1d050405 “”¡©b¥”¦C””’ø¦¥¦
00000030: feff0006 6204ff05 43fffffd 31ff0401 “”¡©b¥”¦C””’1”¥¢
00000040: 5bfffff3 e7000001 c1050300 bf040100 [””ṙḃ¡¡¢Ḋ¦¤¡Ḃ¥¢¡
00000050: 5b00ffef f6040002 f8000000 [¡”ṁẇ¥¡£ẏ¡¡¡
smooth5 GET $2,rJ
NEG $0,1,$0 // n = 1 - n
SETL $3,0 // i = 0
0H SET $4,$3
INCL $3,1 // loop: j = i++
SADD $4,$4,$3 // j = popcnt(j & ~i)
SR $4,$3,$4 // j = i >> j (cheap way of getting out factors of 2)
1H DIV $5,$4,3 // lp3: k = j / 3
GET $255,rR // tmp = j % 3
CSZ $4,$255,$5 // if(!tmp) j = k
BZ $255,1B // if(!tmp) goto lp3
1H DIV $5,$4,5 // lp5: k = j / 5
GET $255,rR // tmp = j % 5
CSZ $4,$255,$5 // if(!tmp) j = k
BZ $255,1B // if(!tmp) goto lp3
CMP $255,$4,1 // tmp = j <=> 1
PBNZ $255,0B // iflikely(tmp) goto loop
INCL $0,1 // n++
SET $5,$3
PUSHGO $4,$1,0 // f(i)
PBNZ $0,0B // iflikely(n) goto loop
PUT rJ,$2
POP 0,0 // return
1
s is conformant with your specs. It will also be in order, i.e. not an unordered sequence. :) \$\endgroup\$