First of all, make sure you need a custom lookup at all and you can't simply get a lookup generated for you from table relations.
If a custom lookup is necessary, the best approach may be creating a lookup form and associating it with the EDT used by your three fields. Then you can remove all your code. You can see an example on ItemId EDT; notice that its FormHelp property is set to InventItemIdLookupSimple.
If you need code, realize that a single event handler method can be decorated with several attributes (such as FormEventHandler), therefore you can create a single class for all three events, calling the same method in the same class. Therefore you really need just a single class, not six.
I don't know what you mean by "the difference is the table specified in SysTableLookup", because you said that you "want the lookup to be the same for this field in all places". If the lookup should be the same, the table specified in SysTable lookup must be the same too. If the tables are different, you'll have three different lookups, but you surely can share the common logic and use parameters for the parts that differ.