Grid size 6 (91 bytes)
? { 2 . . < / = { * = \ " . & . . . { _ ' . . { . . } ' * 2 _ } { / . } & . ! " . > % . . < | . . @ | \ . . \ . | ~ . . 3 . . " . } . " . " . & . \ = & / 1 \ = { : = } . [ = { { { <
Compact version
?{2..</={*=\".&...{_'..{..}'*2_}{/.}&.!".>%..<|..@|\..\.|~..3..".}.".".&.\=&/1\={:=}.[={{{<
Grid size 7 (112 bytes)
? { 2 " ' 2 < / { * \ / : \ " . = . = . = | . 3 / & / { . . } { . " . > $ } { { } / = . 1 _ . . } . . _ . . & . { . > % < . . ~ & . . " . | | . . } - " . ' . @ | { . . . = & . . * ! . { . . . _ . . . _ . = > 1 . . . . . < [ . . . . . . . . . . . . . . .
Try it online!
Compact Version:
?{2"'2</{*\/:\".=.=.=|.3/&/{..}{.".>$}{{}/=.1_..}.._..&.{.>%<..~&..".||..}-".'.@|{...=&..*!.{..._..._.=>1.....<[
Ungolfed Version for better readability:

Approximate Memory Layout

Grey Path (Memory initialization)
? Read input as integer (Input) { Move to memory edge "Divisor left" 2 Set current memory edge to 2 " ' Move to memory edge "Divisor right" 2 Set current memory edge to 2 " Move to memory edge "Multiplier" 3 Set current memory edge to 3 " Move to memory edge "Temp 2" 1 Set current memory edge to 1 { { { Move to memory edge "Modulo" = Turn memory pointer around [ Continue with next instruction pointer
Loop entry
% Set "Modulo" to Input mod Divisor < Branch depending on result
Green Path (value is still divisible by 2)
} } { Move to memory edge "Result" = Turn memory pointer around * Set "Result" to "Temp 2" times "Multiplier" (3) { = & Copy "Result" into "Temp2" { { } } = Move to "Temp" : Set "Temp" to Input / Divisor (2) { = & Copy "Temp" back to "Input" " Move back to "Modulo"
Red Path (value is no longer divisible by 2)
} = & " ~ & ' Drag what's left of "Input" along to "Multiplier" * Multiply "Multiplier" with "Temp 2" ! @ Output result, exit program