Print me a Tower Block Print a tower block with the shortest possible code. 

Input:

The input defines how many floors the tower block has. One floor contains a window on either side of the door. The window is made up of 3x3 hashes.

An example of a 4 storey tower block is below:

      =====================
      )V V V V V V V V V V(
     )V V V V V V V V V V V(
    )V V V V V V V V V V V V(
   )V V V V V V V V V V V V V(
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : : : : : : : : : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : ### : : : : : : ### : :
   : : : : : : : : : : : : : :
   : : : : : _______ : : : : :
   : : ### : I     I : ### : :
   : : ### : I     I : ### : :
   : : ### : I     I : ### : :
   : : : : : I     I : : : : :


Update:

The input has to be one or greater.

Trailing spaces at the end of lines are allowed.

In my example, every line has three leading spaces. This isn't mandatory, just the tower block with the input is.
Mathematica, 301 288 258 bytes

" "~(s=If[#2==0,"",#~StringRepeat~#2]&amp;)~3&lt;&gt;{"="~s~21,"
",s[" ",12-#]&lt;&gt;{")","v "~s~#,"v(
"}&amp;/@9~Range~12,"~"~s~27,"
",s[(x=(u=": ")~s~13&lt;&gt;":
")&lt;&gt;{y=u&lt;&gt;{z=": ### ",v=u~s~5,w=z&lt;&gt;": :
"},y,y,x},#-1],v,"_"~s~7," ",v,"
",m=u&lt;&gt;{z,u,n="I     I ",w},m,m,v,n,w}&amp;


Pure function which takes a positive integer and outputs a string. The output string won't look right because Mathematica apparently doesn't display monospace fonts as monospace:



For reasons I don't quite understand, it does format as monospace if you Print the string:



Edit: Saved several bytes by not including "   " at the beginning of each line. Changed the definition of s to handle the case where there is only one floor (StringRepeat doesn't like repeating a string 0 times).

Edit 2: Thanks to LegionMammal978 and the fact that StringJoin is Listable, this is now an incomprehensible nightmare of nested lists and also 30 bytes shorter.