How to drop a procedure across a lot of databases (SQL Server 2016)
You were very close, but forgot a small thing :

execute sp_msforeachdb 'USE [?] drop procedure Usages'


The use [?] will actually go to each db, and execute it there, this should solve your issue.
You could however add something that firsts checks if the procedure exists before dropping it, cause now you'll still get the error if it doesn't exists on the database.

Edit:
A cleaner version would be this:

DECLARE @SQL NVARCHAR(MAX)

SET @SQL = '
USE [?]
IF EXISTS ( SELECT  *
            FROM    sys.objects
            WHERE   object_id = OBJECT_ID(N''Usages'')
                    AND type IN ( N''P'', N''PC'' ) ) 
drop procedure Usages
'

EXEC sp_MSforeachdb @SQL


It'll check if it exists before dropping, so if there's so such sp, it won't give you an error.

EDIT2:
ElliotMajor made the comment


  I would note that sp_msforeachdb is undocumented and shouldn't be
  used. Plenty of known bugs


And he's right about that. For what you're doing right now it should be fine, but if you're ever in need to put this in some production code, there's a couple replacements for this sp.

Improved versions by :Spaghetti DBA and Aaron Bertrand