Happy Birthday, let's have some cake!
Charcoal, 76 71 70 66 46 bytes

ＮθＦ=+Ｂ⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹↘↘Ｆθ«↑|*¶¶¿‹⁶﹪⁺ιι⁹«Ｍ⁹←↓


Try it online! Link is to verbose version of code. Edit: Saved 1 byte thanks to @ASCII_Only. Saved a massive 20 bytes by discovering a neat way of drawing the candles. Explanation:

ＮθＦ=+Ｂ⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹


Calculate the size both of the whole cake including extra volume and just the top of the cake so that they can be drawn. ((= = ASCII 61) = (+ = ASCII 43) + 9 * 2 for the extra volume.)

↘↘Ｆθ«


Move the cursor to the first row of 5 candles. Loop through each candle.

↑|*¶¶


Print a candle and move right two characters for the next candle.

¿‹⁶﹪⁺ιι⁹«


However after the (zero-indexed) 4th, 8th, 13th, 17th, 22nd etc. candles (that are at the end of a row),

Ｍ⁹←↓


move the cursor to the first candle on the next row. This works on both odd and even rows!