I don't know if it would be more efficient, but better practice is that when you have code that is repeated with just values changing, put he code into a function.
if(mode == 0){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
}
The above code is repeated over and over with just the values changing, one could make a function like this:.
void digOut(boolean led1State, boolean led2State, boolean led3State)
{
digitalWrite(led1, led1State);
digitalWrite(led2, led2State);
digitalWrite(led3, led3State);
}
Then call the function with:
if(mode == 0)
{
digOut(LOW, LOW, LOW);
}
or
if(mode == 5)
{
digOut(LOW, HIGH, HIGH);
}