fist of all, you mentioned one of the advantages, you can't create an instance of that class, and you use the abstract when you explicitly DO NOT want to make an instance of it.
for example, your B and C classes share a few fields or methods, now you create an abstract class that contains these methods and fields but at the same time these methods do not compose any logical group, that is why we do not any instance of that specific class and thus we declare it to be abstract.
You may Declare it as a normal class, no complication error in that, but that somehow doe not follow the rules of OOP because then anyone can create an instance of that class which is redundant and unnecessary.
In OOP the point of classes is to gather common features/methods/fields and create them under an object name, an abstract class is not something we'd want to use separately from our B and C classes (for example).
Hope that helps.