how are you building your string? if you're attempting to concatenate 'regular' varchars together, they'll max out at 8000 characters regardless of what you're trying to stuff them into.
declare @sql nvarchar(max), @fragment varchar(3000)
set @fragment = replicate( 'long text!', 300 )
print len(@fragment) -- 3000
set @sql = @fragment + @fragment + @fragment
print len(@sql) -- 8000
set @sql = cast(@fragment as nvarchar(max)) + cast(@fragment as nvarchar(max)) + cast(@fragment as nvarchar(max))
print len(@sql) -- 9000