You have not specified any integer variables. Use the INTEGER option in the VAR statement and then the .RELAX suffix to relax x[2]. Also, you need not enter the zero coefficients explicitly. In fact, you can avoid those last three constraints by instead using the .UB variable suffix:
proc optmodel;
var x{1..3}>=0 integer;
x[2].relax = 1;
max z=900*x[1]+1500*x[2]+1000*x[3];
con c1: 50000*x[1]+12000*x[2]+8000*x[3]<=250000;
x[1].ub = 4;
x[2].ub = 15;
x[3].ub = 20;
solve with milp/presolver=none;
print x;
quit;
If you change the objective coefficient for x[1] from 900 to 9000, you do get an optimal objective value of 42,250.