This is one way to do it.
Position the PCBs in the pattern/spacing you want on graph paper. Transfer draw holes to be drilled aligned on the graph grid. Add centerline of pattern to grid. Then cut down paper and use centerline and grid to position on heat sink and tape it down securely. Then locate PCBs on graph grid drawn holes and tape down. Use centerpunch in PCB holes to dimple heat sink to prevent drill wandering. I leave the grid paper and PCB there to act as a visual template when drilling.
I use a cheap Harbor Freight desktop drill press to get the tap drill holes drilled perpendicular to the heat sink face. For M3x0.5 threads I use a 3/32 (.094) inch tap drill size. I preset the stops for a drill depth to around 6-7mm, as to not break out the other side of the heat sink. And then drill all the holes. Pull the PCBs and graph paper off and deburr the drilled holes so that the rough edges are flush with the heat sink surface.
Then mount a M3x 0.5 bottoming tap in the Shars tap holder (the T handle shaped piece). Slip it into the Shars alignment stand (this holds the T handle piece perpendicular to the surface), and then using a little light lubricant, carefully hand tap each hole drilled. After each full turn of the tap, back turn 1/4 turn to cut off the internal chip. Repeat until you can remove the tap and easily screw in the length of the machine screw used for assembly.
FYI, I cleaned the cheap shipping lube off the sliding parts of the tap holder because it was squeaking badly when used. Replaced with a little Never Seize and now it spins without a peep.