Why doesn't the MCU's pin go high on time?
You are executing your loop 72000000 times. 

You seem to think that each loop will take one clock cycle. However, at minimum, even the simplest loop with a counter will take multiple operations: De-increment, compare, conditional jump. 

Also, not all assembly operations take just one cycle.

In this case, you have two assembly operations in your loop:

0x080000562 SUBS  r0, r0, #1
0x080000564 BNE   0x080000562


The SUBS flag subtracts, (SUB fragment), and sets conditional flags (S fragment). 
The BNE does a branch (B fragment) if not-equal (NE fragment). 

The  STM32F103 is a Cortex M3 based processor, which means it uses the ARMv7-M architecture. Looking up the Cortex M3 architecture assembly listing, we see:

Operation   Description   Assembler           Cycles  
Subtract    Subtract      SUB Rd, Rn, &lt;op2&gt;   1  
Branch      Conditional   B&lt;cc&gt; &lt;label&gt;       1 or 1 + P


So the subtract operation takes 1 cycle, and the branch takes either 1 (if the branch is not taken), or 1 + P if it is. P in this case is:


  "The number of cycles required for a pipeline refill. This ranges from
  1 to 3 depending on the alignment and width of the target instruction,
  and whether the processor manages to speculate the address early"


In total, assuming P is 3 in this case, this only results in 5 operations, so I'd assume that either you're seeing a five second delay, not six, or it's possible the addition of the S fragment to SUB causes it to take another clock cycle (but I'm just guessing there).