This won't work, because the compiler thinks you mean "OR if n3 is true," which is useless in a situation like this. In order for it to work, you'll need to expand each condition out like this:
if(n1 < n2 || n3) I'm 100% sure that is not what you want to do, more explicitly put, it reads if((n1 < n2) || n3) which is to say that if n1 is smaller then n2, the expression is true, or if n3 is true (n3 is not 0), the expression is true. So for what you have, as long as n3 is not 0, it will always evaluate to true. What you want is more along the lines of if(n1 < n2 && n1 < n3).
Moving along further, might I present my solution for finding the smallest, using a variable to hold the smallest: