Serial.available()

That has nothing to do with the " if(Serial.available()>=3){ " issue of how many bytes are in the serial receive buffer being discussed. The person with the issue will now also have to evaluate line feeds and such if the code prints the captured string back to the serial monitor for trouble shooting.

No, but OP doesn't have to care about the number of bytes to be read. Read and store anything in the buffer, unless it is the character added by the Serial Monitor. If it is a character added by the Serial Monitor, it indicates the end of a packet, and the stored packet can now be printed, converted to an int, parsed, etc. - whatever is appropriate for the data that was sent. And, no delay()s are needed.