Bytelandian gold coins problem: getting wrong answer each time ( thanks in advance!)

my code is this:

  class Solution
  {
       static long find(long n)
       {
	      System.out.println("in find with n = "+n);
 	      if(n<12)
		       return n;
	      else
	      {
		       if(h.containsKey(n))
			       return h.get(n);
		       else
		       {
			          long max = Math.max(n,find(n/2)+find(n/3)+find(n/4));
			          h.put(n,max);
			          return h.get(n);
		        }
	     }		
		
        }
       static HashMap<Long,Long> h = new HashMap<Long,Long>();
       public static void main(String[] args) throws IOException
       {
	        NScanner sc = new NScanner(System.in);
	        long n = sc.nextLong();
	       System.out.println(find(n));
	       sc.close();
        }	
     }
class NScanner {
private InputStream mIs;
private byte[] buf = new byte[1024];
private int curChar;
private int numChars;
     //	static StringBuilder mod = new StringBuilder("");

public NScanner() {
	this(System.in);
}

public NScanner(InputStream is) {
	mIs = is;
}

public int read() {
	if (numChars == -1)
		throw new InputMismatchException();
	if (curChar >= numChars) {
		curChar = 0;
		try {
			numChars = mIs.read(buf);
			//System.out.println(Arrays.toString(buf));
		} catch (IOException e) {
			throw new InputMismatchException();
		}
		if (numChars <= 0)
			return -1;
	}
	return buf[curChar++];
}

public String nextLine() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	StringBuilder res = new StringBuilder();
	do {
		res.appendCodePoint(c);
		c = read();
	} while (!isEndOfLine(c));
	return res.toString();
}


public String nextString() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	StringBuilder res = new StringBuilder();
                   //		mod.setLength(0);
	do {
		res.appendCodePoint(c);
                //			if(Character.isUpperCase(c))
                 //				mod.appendCodePoint(c);
		c = read();
	} while (!isSpaceChar(c));
	return res.toString();
}
public char nextChar() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	return (char)c;
}
public char nextSimpleChar() {
	int c = read();
	return (char)c;
}
public long nextLong() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	int sgn = 1;
	if (c == '-') {
		sgn = -1;
		c = read();
	}
	long res = 0;
	do {
		if (c < '0' || c > '9')
			throw new InputMismatchException();
		res *= 10;
		res += c - '0';
		c = read();
	} while (!isSpaceChar(c));
	return res * sgn;
}

public int nextInt() {
	int c = read();
	while (isSpaceChar(c))
		c = read();
	int sgn = 1;
	if (c == '-') {
		sgn = -1;
		c = read();
	}
	int res = 0;
	do {
		if (c < '0' || c > '9')
			throw new InputMismatchException();
		res *= 10;
		res += c - '0';
		c = read();
	} while (!isSpaceChar(c));
	return res * sgn;
}

public boolean isSpaceChar(int c) {
	return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
}

public boolean isEndOfLine(int c) {
	return c == '\n' || c == '\r' || c == -1;
}
public void close() throws IOException
{
	mIs.close();
}
public int available() throws IOException
{
	return mIs.available();
}
    }

You are printing only for 1 test case.

See sample input, there can be multiple N for which you need to calculate answer. You need to use special method of taking input when number of test cases (or number of N for which we have to give answer) is unknown.