Trun a query result to argument of EXEC sp_executesql
It wasn't problem with NVARCHAR(MAX) limit for sure. 120 tables isn't a lot and NVARCHAR(MAX) limit is a way above what is needed here (up to 2 GB data), more information link.

I've just checked this solution and it works for me (399 tables).

DECLARE @sql NVARCHAR(MAX) = ''

SELECT @sql += 'SELECT Top 1 [table] = ''' 
            + REPLACE(name, '''','') 
            + ''', 1 FROM ' 
            + QUOTENAME(SCHEMA_NAME([schema_id]))  
            + '.' 
            + QUOTENAME(name) + ';' 
FROM     sys.tables AS t
ORDER BY name;

EXEC sp_executesql @sql


If you want to see the whole content of NVARCHAR(MAX) value in SSMS (SELECT and PRINT have limits), you could do something like that:

SELECT @sql AS [processing-instruction(x)]
FOR XML PATH('')


As suggested by @Dan Guzman, more reliable approach would be:

DECLARE @sql NVARCHAR(MAX) = ''

SELECT @sql = STUFF((SELECT 'SELECT Top 1 [table] = ''' 
                            + REPLACE(name, '''','') 
                            + ''', 1 FROM ' 
                            + QUOTENAME(SCHEMA_NAME([schema_id]))  
                            + '.' 
                            + QUOTENAME(name) + ';' 
                     FROM sys.tables AS t
                     FOR XML PATH(''), TYPE).value(N'.[1]', N'varchar(max)'), 1, 0, '');

EXEC sp_executesql @sql