Preheat oven to 350 degrees. Generously spray or butter/flour three 9-inch cake rounds.
Whisk together the flour, sugar, cocoa, baking soda, baking powder, and salt in a stand mixer using a low speed until combined.
Add eggs, sour cream, buttermilk, warm water, oil, and vanilla. Beat on a medium speed until smooth, about a minute.
Divide batter evenly between the three pans (about 3 cups of batter per pan).
Place in the oven and bake for 30-35 minutes or until a cake tester inserted into the center comes out clean. Keep an eye on it, you don't want to over-bake this cake!
Remove from the oven and allow to the cakes to cool in the pans for 20 minutes, then invert onto wire racks. Allow to cool completely before frosting.
For the frosting, in a large bowl (or the bowl of a stand mixer), beat the butter and cream cheese until light and fluffy, about 2-3 minutes.
Carefully add in the cocoa powder, vanilla and salt, beat until combined.
With mixing speed on low, gradually add the powdered sugar, one cup at a time. When all of the powdered sugar has been added, beat in heavy cream, then add more to create a spreadable consistency. The frosting should be on the thicker side, however, it will thicken even more when the cake is refrigerated.
Spread the frosting in between the cooled layers, then on the sides and on top. Spread into a smooth, even layer, using an offset spatula. Decorate as desired. Place in the refrigerator to chill for at least 1 hour before serving.