Imbalance classes problem
I think you're in a pretty difficult state. I think the class imbalance techniques you're using are fine. I would advise you to try framing your problem in a hierarchical classification manner.

Level 1 Classifier

classifier_A between class 0 &amp; class (1 + 2 + 3)

Note: Apply all sort of class imbalance methods to get good accuracy here

Level 2 Classifier

classifier_B between class 1, class 2, class 3

Final pseudo model

if predict_classifier_A(x_test) == "class 0":
   result = "class 0"
 else:
   result = predict_classifier_B(x_test)




I'm not sure will it work or not but its worth a try. Let us know if it worked better.