Ruby, 261 258 250 242
c=[]
n=99
$F.map{|e|e=e.to_i
c<<(e<0?[e,-1]:[0,e-1])}
m=[]
x=0
c.map{|d|x+=4
k,l=d
(k+n..l+n).map{|y|y*=2
[[3,3,2,'__'],[2,1,6,'/__ /|'],[1,0,7,'| | |'],[0,0,6,'|___|/']].map{|e|a,b,c,s=e
(m[y+a]||=' '*79)[x+b,c]=s}}}
puts m.compact.reverse
Run with ruby -n -a v2.rb
This entry is slightly overdesigned in that it can begin and end stacks at any level, not just at 0. There is no way to specify this in the "competition version", but if you replace the first 4 lines with c=eval $_;n=99
then it drops to 203 bytes and you can do: <
[[-3,3],[-3,-2],[2,3],[-3,-3],[-2,-1],[3,3],[2,2],[1,1],[0,0]]
__ __ __
/__ /| /__ /| /__ /|
| | | | | | | | |__
|___|/| |___|/| |___|/__ /|
| | | | | | | | |__
|___|/| |___|/ |___|/__ /|
| | | | | |__
|___|/| |___|/__ /|
| | | __ | | |
|___|/| /__ /| |___|/
| | |__ | | |
|___|/__ /| |___|/|
| | | | _| | |
|___|___|/| /__|___|/
| | | | | | |
|___|___|/ |___|/